package com.example.module_motocircle.flow

import com.example.lib_common.base.state.UIState
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow

/*
StateFlow 是一种状态容器式数据流
必须有初始值
只保留最新值
自动去重（新值与当前值相同时不会触发更新）
新订阅者会立即收到当前值
 */
class StateFlow {
    //创建 StateFlow
    private val _uiState = MutableStateFlow<UIState>(UIState.LOADING) // 私有可变版本
    val uiState = _uiState.asStateFlow() // 公开不可变版本

    //更新状态
    fun test(data: Any) {
        // 方式1：直接赋值
        _uiState.value = UIState.SUCCESS

// 方式2：基于当前值更新
//        _uiState.update { currentState ->
//            currentState.copy(loading = false)
//        }
    }

    fun test2() {
//        viewModelScope.launch {
//            uiState.collect { state ->
//                // 更新UI
//                when(state) {
//                    is UiState.Loading -> showLoading()
//                    is UiState.Success -> showData(state.data)
//                    is UiState.Error -> showError(state.message)
//                }
//            }
//        }
    }

    /*
    使用场景
UI状态管理（加载/成功/错误状态）
表单数据管理
需要反映当前状态的任何数据
     */


}